package com.bwie.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

@Component//把LoggerAspect交给spring容器管理
@Aspect  //将当前组件标识为切面
public class LoggerAspect {

    @Autowired
    HttpServletRequest request;


    /**
     * @Pointcut声明一个公共的切入点表达式:第一个*表示任意的访问修饰符和返回值类型 第一个*表示任意的访问修饰符和返回值类型
     * 第二个*表示包下的任意类
     * 第三个*表示类中任意的方法
     * （..）表示任意的参数列表
     */
	 //@Pointcut("execution(* //com.bwie.service.impl.UserServiceImpl.doLogin(..))")
    @Pointcut("execution(* com.bwie.service.impl..*.*(..))")
    public void pointCut() {
    }


    //环绕通知
    @Around("pointCut()")
    //环绕通知的方法的返回值一定要和目标对象方法的返回值一致
    public Object aroundAdviceMethod(ProceedingJoinPoint joinPoint) throws Throwable {

        System.out.println("环绕通知-->前置通知");


        //表示目标对象方法的执行
        Object result = joinPoint.proceed();//service实现层登录认证方法
			

        System.out.println("环绕通知-->返回通知");

        return result;
    }


}